package com.xbongbong.saas.model;

import com.xbongbong.paas.toolbox.exception.XbbException;
import com.xbongbong.paas.toolbox.wrap.IModel;
import com.xbongbong.saas.domain.entity.SaleStageEntity;

import java.util.Collection;
import java.util.List;
import java.util.Map;

/**
 * @author haibin.zhang
 * @version v1.0
 * @date 2019/2/13 11:05
 * @since v1.0
 */
public interface SaleStageModel extends IModel<SaleStageEntity> {

    @Override
    List<SaleStageEntity> findEntitys(Map<String, Object> param);

    SaleStageEntity getByKey(Long key, String corpid);

    /**
     * 通过formId + code获取到一个阶段实体
     * 同一个form下code肯定唯一，但是多个form之间可能不唯一（新初始化的form都用的默认阶段code - 1、2、3、4...）
     * @param corpid 公司id
     * @param formId 模板id
     * @param code 阶段code
     * @return com.xbongbong.saas.domain.entity.SaleStageEntity
     * @author zcp
     * @since v1.0
     * @version v1.0
     */
    SaleStageEntity getByCode(String corpid, Long formId, String code);
    /**
     * 通过formId + code获取到一个阶段实体
     * 同一个form下code肯定唯一，但是多个form之间可能不唯一（新初始化的form都用的默认阶段code - 1、2、3、4...）
     * @param corpid 公司id
     * @param formId 模板id
     * @param codeIn 阶段code
     * @return com.xbongbong.saas.domain.entity.SaleStageEntity
     * @author 吴峰
     * @since v1.0
     * @version v1.0
     */
    List<SaleStageEntity> getByCodeIn(String corpid, Long formId, Collection<String> codeIn);

    Long save(SaleStageEntity saleStageEntity) throws XbbException;

    /**
     * 获取默认的销售阶段
     * @return
     */
    List<SaleStageEntity> getDefaultList();

    void insertBatch(List<SaleStageEntity> list);

    /**
     * 获取首个成功阶段
     */
    SaleStageEntity getFirstSuccessStage(String corpid, Long formId, Long stageProcessId);

    /**
     * 获取首个阶段
     */
    SaleStageEntity getFirstStage(String corpid, Long formId, Long stageProcessId);

    /**
     * 获取列表
     * @return
     */
    List<SaleStageEntity> getList(String corpid,Long formId, Integer enable, Integer type);

    Map<String, String> getAllStageMap(String corpid);

    void updateBatch(List<SaleStageEntity> saleStageEntityList, String corpid);

    void updateBatchDefaultAndLinkOption(List<SaleStageEntity> saleStageEntityList, String corpid);

    void updateBatch4MirrorRollback(List<SaleStageEntity> saleStageEntityList, String corpid);

    void updateBatch4Script(List<SaleStageEntity> saleStageEntityList);

    Integer insert4Script(SaleStageEntity entity) throws XbbException;

    void insertBatch4Script(List<SaleStageEntity> list);

    Integer deleteBatch(List<SaleStageEntity> stageEntityList, String corpid);

    SaleStageEntity getFirstCreateContractSkipSuccessStage(String corpid, Long formId, Long stageProcessId);
}
